package br.ufrj.ad.evento;

import org.apache.log4j.Logger;

import br.ufrj.ad.As;
import br.ufrj.ad.entidade.Peer;
import br.ufrj.ad.entidade.Rodada;
import br.ufrj.ad.estatistica.Amostragem;

public class Chegada extends Evento {

	private static final Logger log = Logger.getLogger(Chegada.class);
	
	public Chegada(double tempo, Peer peer, Rodada rodada, As as) {
		super(tempo, peer, rodada, as);
	}

	@Override
	void proximoEvento(Rodada rodadaProximoEvento) {
		
		if(as.parametros.LAMBDA > 0) {
			Chegada chegada = new Chegada(tempo + Amostragem.exponencial(as.parametros.LAMBDA), new Peer(as), rodadaProximoEvento, as);
			as.eventos.add(chegada);
		}
		
		rodada.addTempoProTamanhoPopulacao(as.tamanhoPopulacao(), tempo - rodada.getTempoUltimaChegadaSaida());
		rodada.setTempoUltimaChegadaSaida(tempo);
		
		peer.setTempoChegada(tempo);
		PeerUpload event = new PeerUpload(tempo+Amostragem.exponencial(as.parametros.MI), peer, rodadaProximoEvento, as);
		as.eventos.add(event);
		peer.addUploadAgendado(event);
		as.peers.add(peer);
		log.debug(peer+" chegou em "+tempo);
	}

}
